package BigInteger_BigDecimal;

import java.math.BigDecimal;

public class BigDecimalDemo1 {
    public static void main(String[] args) {
        System.out.println(0.09 + 0.01); // 0.09999999999999999
        System.out.println(0.216 - 0.1); // 0.11599999999999999
        System.out.println(0.226 * 0.01); // 0.0022600000000000003
        System.out.println(0.09 / 0.1); // 0.8999999999999999

        //计算机的小数
        //十进制的小数转成二进制位数会非常长
        //而float和double给予小数的位数是有限的，超出部分会进行舍去，导致小数存储的不精确情况
        //因此为了解决小数精确计算，java提供了BigDecimal

        //BigDecimal
        //1.  通过传递double类型的小数来创建对象
        //可能会出现不可预知性问题
        BigDecimal bd1 = new BigDecimal(0.09);
        System.out.println(bd1); // 0.0899999999999999966693309261245303787291049957275390625

        //2.  通过传递String类型表示的小数来创建对象
        //精确
        BigDecimal bd2 = new BigDecimal("0.09");
        System.out.println(bd2); // 0.09

        //3.  静态方法
        //小于double推荐使用
        //跟BigInteger 差不多   0 ~ 10
        BigDecimal bd3 = BigDecimal.valueOf(0.2);
        System.out.println(bd3); // 0.2

        //常见方法
        //public static BigDecimal valueOf(double val)        //获取对象
        //public BigDecimaladd(BigDecimal val)        //加法
        //public BigDecimal subtract(BigDecimal val)        //减法
        //public BigDecimal multiply(BigDecimal val)        //乘法
        //public BigDecimal divide(BigDecimal val)        //除法
        //public BigDecimal divide(BigDecimal val,精确几位，舍入模式eg:四舍五入)  //除法

        //第一种divide方法遇到除不尽的情况会报错
        //此时使用第二种
        BigDecimal bd4 = bd2.divide(bd3, 3, BigDecimal.ROUND_HALF_UP);
        System.out.println(bd4);//bd2 ÷ bd3 保留3位小数  四舍五入方式  // 0.450
    }
}
